package com.zs.usc.utils;

import java.nio.charset.Charset;
import java.util.Base64;

import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;

/**
 * 加密帮助类
 */
public class EncryptUtils {


    private EncryptUtils() {
    }

    /**
     * MD5加密
     *
     * @param str 待加密字符串
     * @return 加密之后的结果
     */
    public static String md5Encode(String str) {
        return encode(str, "MD5");
    }

    public static void main(String[] args) {
        System.out.println("md5Encode(\"root\") = " + md5Encode("root"));

    }


    /**
     * Base64加密字符串
     *
     * @param str 待处理字符串
     * @return 处理之后的结果
     */
    public static String base64Encode(String str) {
        return Base64.getEncoder().encodeToString(str.getBytes());
    }

    /**
     * Base64加密字节数组
     *
     * @param bytes 待处理字节数组
     * @return 处理之后的结果
     */
    public static String base64Encode(byte[] bytes) {
        return Base64.getEncoder().encodeToString(bytes);
    }

    /**
     * Base64解码字符串
     *
     * @param str 待解码字符串
     * @return 解码结果
     */
    public static String base64Decode(String str) {
        return new String(Base64.getDecoder().decode(str), Charset.defaultCharset());
    }

    /**
     * 采用MessageDigest信息摘要算法加密字符串
     *
     * @param str    待加密字符串
     * @param method 加密方法
     * @return 加密结果
     */
    private static String encode(String str, String method) {
        MessageDigest md = null;
        String dstr = null;

        try {
            // 加密MD5和SHA
            md = MessageDigest.getInstance(method);
            md.update(str.getBytes());
            dstr = (new BigInteger(1, md.digest())).toString(16);
        } catch (NoSuchAlgorithmException var5) {
            var5.printStackTrace();
        }

        return dstr;
    }
}
